package num203;

/**
 * @author : DuJiabao
 * @Date : 2021/1/27 9:31
 * @Project : sword-finger-offer
 * @File : null.java
 * @Desc :删除链表中等于给定值 val 的所有节点。
 * https://leetcode-cn.com/problems/remove-linked-list-elements/
 */
class Solution {
    public ListNode removeElements(ListNode head, int val) {
        ListNode node = new ListNode(0);
        node.next = head;
        ListNode prev = node;
        ListNode curr = head;
        while (curr != null) {
            if (curr.val == val) {
                prev.next = curr.next;  // 等于该值的时候，跳过该结点，指向下一个结点
            } else {
                prev = curr;  // 不等于该值的时候，正常保存当前结点给prev指针
            }
            curr = curr.next;  // 当前结点无论如何，都跳到下一个结点
        }
        return node.next;  // 不能用head，因为head也有可能被删了，只能用node.next
    }
}
